package net.wanho.controller.sys;

import lombok.extern.slf4j.Slf4j;
import net.wanho.controller.BaseController;
import net.wanho.po.sys.User;
import net.wanho.po.sys.ext.UserExt;
import net.wanho.service.sys.UserServiceI;
import net.wanho.vo.AjaxResult;
import net.wanho.vo.TableDataInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @项目名称: [cms]
 * @类名称: [UserController]
 * @类描述: [用户信息表的控制器]
 * @创建人: [choco]
 * @创建时间: [2020-07-30 09:36:32]
 * @修改人: []
 * @修改时间: []
 * @修改备注: []
 * @版本: []
 * @版权: []
 */
@Controller
@RequestMapping("/sys/user")
@ResponseBody
@Slf4j
public class UserController extends BaseController {
    private static final long serialVersionUID = 1L;

    @Autowired
    private UserServiceI userService;


    /**
     * @方法名: [login]
     * @方法描述: [登录功能]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 13:38:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @PostMapping("/login")
    public AjaxResult login(UserExt userExt) {

        UsernamePasswordToken token = new UsernamePasswordToken(userExt.getUserName(), userExt.getPassword());
        // 记住我
        token.setRememberMe(userExt.isRememberme());
        // 登录业务
        userService.login(token);
        return success();
    }

    /**
     * @方法名: [list]
     * @方法描述: [查询用户信息表列表]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @GetMapping("/list")
    @RequiresPermissions("system:user:list")
    public TableDataInfo list(User user) {
        try {
            startPage();
            List<User> list = userService.selectUserList(user);
            return this.getTableDataInfo(list);
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException("服务器正忙，请稍后再试");
        }
    }


    /**
     * @方法名: [remove]
     * @方法描述: [删除用户信息表列表]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @DeleteMapping("/remove/{ids}")
    public AjaxResult remove(@PathVariable String ids) {
        try {
            userService.deleteUserByIds(ids);
            return success();
        } catch (Exception e) {
            log.error(e.getMessage());
            return error();
        }

    }

    /**
     * 新增用户信息表
     */
    @GetMapping("/add")
    public String add() {
        return "/sys/user/add";
    }

    /**
     * @方法名: [add]
     * @方法描述: [增加用户信息表信息]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @PostMapping
    @RequiresPermissions("system:user:add")
    public AjaxResult add(User user) {

        try {
            userService.insertUser(user);
            return success();
        } catch (Exception e) {
            log.error(e.getMessage());
            return error();
        }

    }

    /**
     * @方法名: [getByUserById]
     * @方法描述: [查询用户信息表信息]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @GetMapping("/{userId}")
    public AjaxResult getByUserById(@PathVariable Long userId) {
        try {
            User user = userService.selectUserById(userId);
            return success(user);
        } catch (Exception e) {
            log.error(e.getMessage());
            return error();
        }

    }

    /**
     * @方法名: [update]
     * @方法描述: [修改用户信息表信息]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @PutMapping
    @RequiresPermissions("system:user:edit")
    public AjaxResult update(User user) {

        try {
            userService.updateUser(user);
            return success();
        } catch (Exception e) {
            log.error(e.getMessage());
            return error();
        }
    }
}
